using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using System.Collections;
using BUS;
using DAO;
using DTO;
namespace HOTEL_MANAGEMENT
{
    public partial class frmTT_LapPhieuThue : Form
    {
        //Các biến toàn cục
        //Danh sách khách thuê đã duyệt
        List<CKHACHTHUEDTO> dsKhachThue = new List<CKHACHTHUEDTO>();
        //Bảng table dùng để chứa dữ liệu. sau đó sẽ đổ bảng table vào gridcontrol
        DataTable table = new DataTable();
        private int m_MaPhong;

        public int MaPhong
        {
            get { return m_MaPhong; }
            set { m_MaPhong = value; }
        }
        private DateTime m_NgayBatDau;

        public DateTime NgayBatDau
        {
            get { return m_NgayBatDau; }
            set { m_NgayBatDau = value; }
        }
        public frmTT_LapPhieuThue()
        {
            InitializeComponent();
        }
        //Các hàm bổ sung thêm
        private void XoaTrangFromKhach()
        {
            txtTenKhachThue.Text = "";
            txtCMND.Text = "";
            txtDiaChi.Text = "";
            txtDienThoai.Text = "";
            rbnam.Checked = true;
            try
            {
                cbxLoaiKhach.DataSource = CLOAIKHACHTHUEBUS.LayDanhSachLoaiKhachThueDaDuyet();
                cbxLoaiKhach.DisplayMember = "TenLoaiKhachThue";
                cbxLoaiKhach.ValueMember = "MaLoaiKhachThue";
            }
            catch
            {
                MessageBox.Show("Bạn vui lòng kiểm tra lại kết nối ", "Lỗi kết nối", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
        private void XoaTrangFromThongTinPhong()
        {
            txttenPhong.Text = "Mời bạn chọn phòng";
            txtngayBatDau.Text = NgayBatDau.ToString();
            txttenLoaiPhong.Text = "";
            txtdonGia.Text = "";
        }
        private bool KiemTraKhachDaTonTai()
        {
            foreach (CKHACHTHUEDTO khachthueDto1 in dsKhachThue)
                if (khachthueDto1.CMND == txtCMND.Text)
                    return true;
            return false;
        }
        private bool KiemTraNhapLieuThongTinKhachHang()
        {
            if (txtTenKhachThue.Text == "")
            {
                MessageBox.Show("Bạn chưa nhập tên khách thuê", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                txtTenKhachThue.Focus();
                return false;
            }
            else if (txtCMND.Text == "")
            {
                MessageBox.Show("Bạn chưa nhập CMND", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                txtCMND.Focus();
                return false;
            }
            else if (dtNgaySinh.Value == DateTime.Today)
            {
                MessageBox.Show("Bạn chưa chọn ngày sinh", "Thông Báo");
                return false;
            }
            else
            {
                return true;
            }
        }
        private bool KiemTraNhapLieuPhieuThue()
        {
            if (dsKhachThue.Count > 0 && m_MaPhong != 0)
            {
                return true;
            }
            else if (dsKhachThue.Count <= 0)
            {
                MessageBox.Show("Bạn chưa thêm khách thuê phòng", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return false;
            }
            else if (m_MaPhong == 0)
            {
                MessageBox.Show("Bạn chưa chọn phòng", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return false;
            }
            else
            {
                MessageBox.Show("Bạn chưa chọn phòng, chưa thêm khách thuê", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return false;
            }


        }
        private void frmTT_LapPhieuThue_FormClosing(object sender, FormClosingEventArgs e)
        {
            DialogResult result = MessageBox.Show("Bạn có muốn thoát hay không", "Thông Báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (result == DialogResult.Yes)
            {
                //this.Hide();
                STT_LapPhieuThue.Xoa();
            }
            else
            {
                e.Cancel = true;
            }
        }

        private void frmTT_LapPhieuThue_Load(object sender, EventArgs e)
        {
            //Lấy ngày bắt đầu
            NgayBatDau = DateTime.Now;
            txtngayBatDau.Text = NgayBatDau.ToString();
            //Load danh sách khách thuê đã duyệt lên combobox cbxLoaiKhach
            try
            {
                cbxLoaiKhach.DataSource = CLOAIKHACHTHUEBUS.LayDanhSachLoaiKhachThueDaDuyet();
                //Giá trị hiện lên màn hình
                cbxLoaiKhach.DisplayMember = "TenLoaiKhachThue";
                //Giá trị thực sự
                cbxLoaiKhach.ValueMember = "MaLoaiKhachThue";
                //Add vào các cột cho bảng table
                table.Columns.Add("Tên khách thuê", typeof(string));
                table.Columns.Add("Ngày sinh", typeof(DateTime));
                table.Columns.Add("CMND", typeof(string));
                table.Columns.Add("Địa chỉ", typeof(string));
                table.Columns.Add("Điện thoại", typeof(string));
                table.Columns.Add("Giới tính", typeof(string));
                table.Columns.Add("Loại khách", typeof(string));
                gridControl1.DataSource = table;
                gvKhachThue.SelectAll();
            }
            catch
            {
                MessageBox.Show("Bạn vui lòng kiểm tra lại kết nối ", "Lỗi kết nối", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
        private void btntimPhong_Click(object sender, EventArgs e)
        {
            frmTimPhong frmTimPhong = new frmTimPhong();
            frmTimPhong.ShowDialog();
            if (frmTimPhong.MaPhong != 0)
            {
                txttenPhong.Text = frmTimPhong.TenPhong;
                txtdonGia.Text = frmTimPhong.DonGia.ToString();
                txttenLoaiPhong.Text = frmTimPhong.TenLoaiPhong;
                m_MaPhong = frmTimPhong.MaPhong;
            }
            else
            {
                MessageBox.Show("Bạn chưa chọn phòng", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }     
        private void btnthem_Click(object sender, EventArgs e)
        {
            if (CNGUOIDUNGBUS.kiemTraChuoiLaSo(txtCMND.Text) == false)
            {
                MessageBox.Show("CMND phải là số","Thông báo");
                txtCMND.Focus();
                return;
            }
            else if (CNGUOIDUNGBUS.kiemTraChuoiLaSo(txtDienThoai.Text) == false)
            {
                MessageBox.Show("Điện thoại phải là số", "Thông báo");
                txtDienThoai.Focus();
                return;
            }
            else
            {
                double soLuongKhachToiDa = CQUIDINHBUS.LaySoLuongKhachToiDaTrongPhong();
                int soDong = int.Parse(table.Rows.Count.ToString());
                if (soDong < soLuongKhachToiDa)
                {
                    if (KiemTraNhapLieuThongTinKhachHang() == true)
                    {
                        if (KiemTraKhachDaTonTai() == true)
                        {
                            MessageBox.Show("Có thể khách hàng này đã tồn tại. Bạn vui lòng kiểm tra lại CMND", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            txtCMND.Focus();
                        }
                        else
                        {
                            CKHACHTHUEDTO khachthueDto = new CKHACHTHUEDTO();
                            khachthueDto.TenKhachThue = txtTenKhachThue.Text;
                            khachthueDto.CMND = txtCMND.Text;
                            int ngay = dtNgaySinh.Value.Day;
                            int thang = dtNgaySinh.Value.Month;
                            int nam = dtNgaySinh.Value.Year;
                            string ng = "" + thang + "/" + ngay + "/" + nam;
                            khachthueDto.NgaySinh = DateTime.Parse(ng);
                            khachthueDto.DiaChi = txtDiaChi.Text;
                            khachthueDto.DienThoai = txtDienThoai.Text;
                            if (rbnam.Checked == true)
                                khachthueDto.GioiTinh = "Nam";
                            else
                                khachthueDto.GioiTinh = "Nữ";
                            khachthueDto.MaLoaiKhachThue = int.Parse(cbxLoaiKhach.SelectedValue.ToString());
                            dsKhachThue.Add(khachthueDto);
                            table.Rows.Add(khachthueDto.TenKhachThue, khachthueDto.NgaySinh, khachthueDto.CMND, khachthueDto.DiaChi, khachthueDto.DienThoai, khachthueDto.GioiTinh, cbxLoaiKhach.Text.ToString());
                            XoaTrangFromKhach();
                        }
                    }
                }
                else
                {
                    MessageBox.Show("Vượt quá số lượng khách thuê tối đa cùng phòng", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
       
        }      
        // click vào dòng nào trong gridcontrol thì hiện dữ liệu dòng đó lên form
        private void gvKhachThue_RowClick(object sender, DevExpress.XtraGrid.Views.Grid.RowClickEventArgs e)
        {
            int index = gvKhachThue.FocusedRowHandle;
            //load lên form
            txtTenKhachThue.Text = table.Rows[index]["Tên khách thuê"].ToString();
            txtCMND.Text = table.Rows[index]["CMND"].ToString();
            dtNgaySinh.Value = DateTime.Parse(table.Rows[index]["Ngày sinh"].ToString());
            txtDiaChi.Text = table.Rows[index]["Địa chỉ"].ToString();
            txtDienThoai.Text = table.Rows[index]["Điện thoại"].ToString();
            if (table.Rows[index]["Giới tính"].ToString() == "Nam")
                rbnam.Checked = true;
            else
                rbnu.Checked = true;
            cbxLoaiKhach.Text = table.Rows[index]["Loại khách"].ToString();       
        }

        private void btnsua_Click(object sender, EventArgs e)
        {
            int soDong = int.Parse(table.Rows.Count.ToString());
            if (soDong > 0)
            {
                //lấy chỉ số dòng đang chọn trong gridcontrol
                int index = gvKhachThue.FocusedRowHandle;
                if (index >= 0)
                {
                    //Cập nhật khách thuê tại vị trí index trong danh sách khách thuê dsKhachThue
                    if (KiemTraNhapLieuThongTinKhachHang() == true)
                    {
                        dsKhachThue[index].TenKhachThue = txtTenKhachThue.Text;
                        dsKhachThue[index].CMND = txtCMND.Text;
                        int ngay = dtNgaySinh.Value.Day;
                        int thang = dtNgaySinh.Value.Month;
                        int nam = dtNgaySinh.Value.Year;
                        string ng = "" + thang + "/" + ngay + "/" + nam;
                        dsKhachThue[index].NgaySinh = DateTime.Parse(ng);
                        dsKhachThue[index].DiaChi = txtDiaChi.Text;
                        dsKhachThue[index].DienThoai = txtDienThoai.Text;
                        if (rbnam.Checked == true)
                            dsKhachThue[index].GioiTinh = "Nam";
                        else
                            dsKhachThue[index].GioiTinh = "Nữ";
                        dsKhachThue[index].MaLoaiKhachThue = int.Parse(cbxLoaiKhach.SelectedValue.ToString());
                        //Cập nhật lại giá trị cho dòng tại vị trí index được chọn trong gridcontrol
                        table.Rows[index]["Tên khách thuê"] = dsKhachThue[index].TenKhachThue;
                        table.Rows[index]["Ngày sinh"] = dsKhachThue[index].NgaySinh;
                        table.Rows[index]["CMND"] = dsKhachThue[index].CMND;
                        table.Rows[index]["Địa chỉ"] = dsKhachThue[index].DiaChi;
                        table.Rows[index]["Điện thoại"] = dsKhachThue[index].DienThoai;
                        table.Rows[index]["Giới tính"] = dsKhachThue[index].GioiTinh;
                        table.Rows[index]["Loại khách"] = cbxLoaiKhach.Text;
                        XoaTrangFromKhach();
                    }
                }
                else
                {
                    MessageBox.Show("Bạn chưa chọn khách thuê", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            else
            {
                MessageBox.Show("Danh sách khách thuê rỗng", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }              
        }

        private void btnhoanTat_Click(object sender, EventArgs e)
        {
            if (KiemTraNhapLieuPhieuThue() == true)
            {
                try
                {
                    CPHIEUTHUEDTO phieuthueDto = new CPHIEUTHUEDTO();
                    phieuthueDto.MaPhong = m_MaPhong;
                    phieuthueDto.MaTiepTan = SM_DangNhap.getInstance().MaNguoiDung;
                    phieuthueDto.NgayBatDau = NgayBatDau;
                    CPHIEUTHUEBUS.LapPhieuThue(dsKhachThue, phieuthueDto);
                    XoaTrangFromKhach();
                    XoaTrangFromThongTinPhong();
                    table.Rows.Clear();
                    dsKhachThue.Clear();
                    MessageBox.Show("Lập phiếu thuê thành công", "Thông Báo", MessageBoxButtons.OK);
                }
                catch
                {
                    MessageBox.Show("Bạn vui lòng kiểm tra lại kết nối ", "Lỗi kết nối", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
        }

        private void btnlamLai_Click(object sender, EventArgs e)
        {
            if (gvKhachThue.RowCount > 0)
            {
                XoaTrangFromKhach();
                XoaTrangFromThongTinPhong();
                dsKhachThue.Clear();
                table.Rows.Clear();
            }             
        }
     
        private void txtPhong_Click(object sender, EventArgs e)
        {
            //frmTimPhong frmTimPhong = new frmTimPhong();
            //frmTimPhong.ShowDialog();
            //if (frmTimPhong.MaPhong != 0)
            //{
            //    txttenPhong.Text = frmTimPhong.TenPhong;
            //    txtdonGia.Text = frmTimPhong.DonGia.ToString();
            //    txttenLoaiPhong.Text = frmTimPhong.TenLoaiPhong;
            //    m_MaPhong = frmTimPhong.MaPhong;
            //}
            //else
            //{
            //    MessageBox.Show("Bạn chưa chọn phòng", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
            //}
        }

        private void btnxoa_Click(object sender, EventArgs e)
        {
            int soDong = int.Parse(table.Rows.Count.ToString());
            if (soDong > 0)
            {
                int index = gvKhachThue.FocusedRowHandle;
                if (index >= 0)
                {
                    if (MessageBox.Show("Bạn Có Chắc Chắn Xóa Không?", "Thông Báo!", MessageBoxButtons.YesNo) == DialogResult.Yes)
                    {
                        table.Rows.RemoveAt(index);
                        dsKhachThue.RemoveAt(index);
                    }
                }
                else
                {
                    MessageBox.Show("Bạn chưa chọn khách thuê", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            else
            {
                MessageBox.Show("Danh sách khách thuê rỗng","Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }            
        }

        private void txttenPhong_Click(object sender, EventArgs e)
        {
            frmTimPhong frmTimPhong = new frmTimPhong();
            frmTimPhong.ShowDialog();
            if (frmTimPhong.MaPhong != 0)
            {
                txttenPhong.Text = frmTimPhong.TenPhong;
                txtdonGia.Text = frmTimPhong.DonGia.ToString();
                txttenLoaiPhong.Text = frmTimPhong.TenLoaiPhong;
                m_MaPhong = frmTimPhong.MaPhong;
            }
            else
            {
                MessageBox.Show("Bạn chưa chọn phòng", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
    }
}